# -*- coding: utf-8 -*-
# 姓名:谚语
# 开发时间:2022/11/7 19:53
from flask_restful import Resource
from flask_restful.reqparse import RequestParser

from comment.modules import db
from comment.modules.debt_info import Debt_info
from comment.utils.decorators import login_required
from financial.resources.transaction.seralizer import DebtPaginateSerializer


class Debt(Resource):
    """债权的资源类"""
    # 使用了登录拦截的装饰器[LoginOut整个资源的函数执行前都执行一次装饰器确认是否登录]
    method_decorators = [login_required]

    def get(self):
        """管理员查询所有的债权列表"""
        # 定义
        rp = RequestParser()
        rp.add_argument('start')  # 开始时间
        rp.add_argument('end')  # 结束时间
        rp.add_argument('curPage')  # 当前页
        rp.add_argument('perPage')  # 每页数量
        # 接收
        args = rp.parse_args()
        start = args.get('start')
        end = args.get('end')
        cur_page = int(args.get('curPage'))
        per_page = int(args.get('perPage'))

        # 过滤查询
        # 准备过滤查询（债权表的模型类的查询）
        debt_list = Debt_info.query

        # 第一个过滤条件，根据时间过滤
        if start and end:
            # 需要根据起始时间和结束时间过滤
            # .cast(需要转换的数据，转换后的类型)  进行函数转换
            debt_list = debt_list.filter(db.cast(Debt_info.loanStartDate, db.DATE) >= db.cast(start, db.DATE)) \
                .filter(db.cast(Debt_info.loanStartDate, db.DATE) <= db.cast(end, db.DATE)) \
                .paginate(cur_page, per_page, error_out=False)
        else:
            # .paginate(当前页,每页数量,报错显示=不显示) 直接分页
            debt_list = debt_list.paginate(cur_page, per_page, error_out=False)

        # 债权的分页序列化
        data = DebtPaginateSerializer(debt_list).to_dict()

        return {'msg': 'success', 'data': data}
